package com.ruoyi.project.app.utils;

import java.time.*;
import java.time.format.DateTimeFormatter;

public class TimeUtil {


    /**
     * 定义常用的日期时间格式（未出现的格式直接末尾添加）
     * 0-----yyyy-MM-dd
     * 1-----yyyy-MM-dd HH:mm:ss
     * 2-----yyyyMMdd
     * 3-----yyyyMMddHHmmss
     * 4-----yyyy-MM-dd HH:mm
     * 5-----HH:mm
     * 6-----HH:mm:ss
     * 7-----yyyy-MM
     * 8-----yyyyMMddHHmm
     * 9-----MMdd
     * 10-----yyyyMM
     * 11-----yyyy年MM月dd日
     * 12-----yyyy.MM.dd
     * 13-----yyyy.MM.dd HH:mm:ss
     * 14-----yyyy年MM月
     * 15-----MM.dd
     * 16-----MM
     * 17-----MM月dd日
     * 18-----HH
     * 19-----yyyy年MM月dd日 HH:mm:ss
     */
    public static final String[] FORMATS = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyyMMdd",
            "yyyyMMddHHmmss", "yyyy-MM-dd HH:mm", "HH:mm", "HH:mm:ss", "yyyy-MM", "yyyyMMddHHmm",
            "MMdd", "yyyyMM", "yyyy年MM月dd日", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy年MM月","MM.dd","MM", "MM月dd日", "HH","yyyy年MM月dd日 HH:mm:ss"};




    /**
     * @Deprecated  根据时区获取时间
     * @param zoneIdEnum 时区
     * @Author ChenBo 2021/12/2 11:34
     */
    public static LocalDateTime getTime(ZoneIdEnum zoneIdEnum){
        if (zoneIdEnum ==  null) {
            return null;
        }
        return LocalDateTime.now(ZoneId.of(zoneIdEnum.getZoneIdName()));
    }

    /**
     * 源时区转目的时区
     * @param localDateTime 时间
     * @param srcZoneIdEnum 源时区
     * @param zoneIdEnum 目的时区
     * @return
     */
    public static LocalDateTime convertTimeZone(LocalDateTime localDateTime, ZoneIdEnum srcZoneIdEnum,ZoneIdEnum zoneIdEnum){
        //源时区
        ZoneId srcZone =  ZoneId.of(srcZoneIdEnum.getZoneIdName());
        // 新时区
        ZoneId newZone = ZoneId.of(zoneIdEnum.getZoneIdName());
        // 时区转换
        return localDateTime.atZone(srcZone).withZoneSameInstant(newZone).toLocalDateTime();
    }


    /**
     * 当前系统默认时区转目的时区
     * @param localDateTime 时间
     * @param zoneIdEnum 目的时区
     * @return
     */
    public static LocalDateTime convertTimeZone(LocalDateTime localDateTime, ZoneIdEnum zoneIdEnum){
        // 当前系统时区
        ZoneId currentZone = OffsetDateTime.now().getOffset();
        // 新时区
        ZoneId newZone = ZoneId.of(zoneIdEnum.getZoneIdName());
        // 时区转换
        return localDateTime.atZone(currentZone).withZoneSameInstant(newZone).toLocalDateTime();
    }




    /***
     * @deprecated 获取指定日期的那天的第一秒 00:00:00
     * @author chenbo 2021/11/15 10:10
     */
    public static LocalDateTime dayFirstTime(LocalDate localDate) {
        return LocalDateTime.of(localDate, LocalTime.MIN);
    }

    /***
     * @deprecated 获取指定日期的那天的最后一秒 59:59:59
     * @author chenbo 2021/11/15 10:10
     */
    public static LocalDateTime dayLastTime(LocalDate localDate) {
        return LocalDateTime.of(localDate, LocalTime.MAX);
    }



}
